package com.itheima.reggie.common.util;


import com.itheima.reggie.entity.Employee;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.stereotype.Component;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.List;

/**
 * 数据库数据导出到xls表格
 *
 * @author zjjt
 */
@Slf4j
@Component
public class ExportUtil {

    public static void doIt(List<Employee> pojo, HttpServletResponse response, HashMap<Long, String> updateUser, HashMap<Long, String> createUser) {
        //定义表头-第一行
        String[] titles = {"id", "账户名", "姓名", "密码", "电话", "性别", "身份证号", "状态", "创建人", "创建时间", "修改人", "修改时间"};
        //声明一个工作谱，设置长度为100行
        Workbook wb = new SXSSFWorkbook(100);
        //创建sheet页
        Sheet sheet = wb.createSheet();
        //从0开始定义每一行
        Row row = sheet.createRow(0);
        sheet.setColumnWidth(0, 30 * 256);//设置当前sheet页第一列宽度
        //给单元格设置样式
        CellStyle cellstyle = wb.createCellStyle();
        Font font = wb.createFont();
        //设置字体大小
        font.setFontHeightInPoints((short) 10);
//		//设置字体加粗
        font.setBold(true);
//		//给字体设置样式
//		cellstyle.setFont(font);
//		//设置单元格背景颜色
//		cellstyle.setFillBackgroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
//		//设置单元格填充样式
//		cellstyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        //for循环设置了表头，也就是名称，性别，年龄
        for (int i = 0; i < titles.length; i++) {
            //取到每一行的值由i控制
            Cell cell = row.createCell(i);
            cell.setCellValue(titles[i]);
            cell.setCellStyle(cellstyle);
            //设置列的宽度
            sheet.setColumnWidth(i, 100 * 50);
        }
        //遍历数据集合
        for (int j = 0; j < pojo.size(); j++) {
            //for循环是从0开始的，但是0行在第一个for循环已经设置好了
            Row rowDate = sheet.createRow(j + 1);
            //找到每一行的下标
            Employee employee = pojo.get(j);
            //从第0行第一列开始赋值
            Cell cell = rowDate.createCell(0);
            Long id = employee.getId();
            cell.setCellValue(String.valueOf(id));
            //第二列
            Cell cell2 = rowDate.createCell(1);
            cell2.setCellValue(employee.getUsername());
            //第三列
            Cell cell3 = rowDate.createCell(2);
            cell3.setCellValue(employee.getName());
            //第四列
            Cell cell4 = rowDate.createCell(3);
            cell4.setCellValue(employee.getPassword());
            //第五列
            Cell cell5 = rowDate.createCell(4);
            cell5.setCellValue(employee.getPhone());
            //第六列
            Cell cell6 = rowDate.createCell(5);
            String sex = employee.getSex();
            if ("1".equals(sex)) {
                cell6.setCellValue("男");
            } else {
                cell6.setCellValue("女");
            }
            //第七列
            Cell cell7 = rowDate.createCell(6);
            cell7.setCellValue(employee.getIdNumber());
            //第八列
            Cell cell8 = rowDate.createCell(7);
            Integer status = employee.getStatus();
            if (status == 1) {
                cell8.setCellValue("启用");
            } else {
                cell8.setCellValue("禁用");
            }
            //第九列
            Cell cell9 = rowDate.createCell(8);
            String createUserName = createUser.get(id);
            cell9.setCellValue(createUserName);
            //第十列
            Cell cell10 = rowDate.createCell(9);
            cell10.setCellValue(String.valueOf(employee.getCreateTime()));
            //第十一列
            Cell cell11 = rowDate.createCell(10);
            String updateUserName = updateUser.get(id);
            cell11.setCellValue(updateUserName);
            //第十二列
            Cell cell12 = rowDate.createCell(11);
            cell12.setCellValue(String.valueOf(employee.getUpdateTime()));
        }
        //输出数据的集合
        System.out.println("数据：" + pojo);
        //定义导出文件的路径
        //String file="C:\\Users\\zjjt\\Desktop/导出.xls";
        //new File("F:\\img/employee.xls");
        try {
            //输出流
            //FileOutputStream fileoutputstream=new FileOutputStream(new File("F:\\img/employee.xls"));
            //写出
            //wb.write(fileoutputstream);
            //关闭
            //wb.close();


            //设置传输文件类型
            response.setHeader("Content-Disposition",
                    "attachment; filename=employee.xlsx");
            //获取输入流写入数据,并根据文件路径写入数据
            //FileInputStream fileInputStream = new FileInputStream(new File("F:\\img/employee.xls"));
            //获取输出流
            ServletOutputStream outputStream = response.getOutputStream();
            wb.write(outputStream);
            wb.close();
            outputStream.close();
            System.out.println("导出成功!!");
        } catch (Exception e) {
            //抛出异常
            e.printStackTrace();
        }
    }
	/*public static void main(String[] args) {
		//实例化dao对象
		StudentDao stu=new StudentDao();
		//用集合接收查询到的对象
		List<Student> list=stu.getByAll();
		//定义表头-第一行
		String[] titles= {"编号","姓名","年龄","性别"};
		//声明一个工作谱，设置长度为100行
		Workbook wb=new SXSSFWorkbook(100);
		//创建sheet页
		Sheet sheet = wb.createSheet();
		//从0开始定义每一行
		Row row=sheet.createRow(0);
		sheet.setColumnWidth(0, 30*256);//设置当前sheet页第一列宽度
		//给单元格设置样式
		CellStyle cellstyle=wb.createCellStyle();
		Font font= wb.createFont();
		//设置字体大小
		font.setFontHeightInPoints((short)10);
//		//设置字体加粗
		font.setBold(true);
//		//给字体设置样式
//		cellstyle.setFont(font);
//		//设置单元格背景颜色
//		cellstyle.setFillBackgroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
//		//设置单元格填充样式
//		cellstyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
		//for循环设置了表头，也就是名称，性别，年龄
		for (int i = 0; i < titles.length; i++) {
			//取到每一行的值由i控制
			Cell cell= row.createCell(i);
			cell.setCellValue(titles[i]);
			cell.setCellStyle(cellstyle);
			//设置列的宽度
			sheet.setColumnWidth(i, 100*50);
		}
		//遍历数据集合
		for (int j = 0; j < list.size(); j++) {
			//for循环是从0开始的，但是0行在第一个for循环已经设置好了
			Row rowDate=sheet.createRow(j+1);
			//找到每一行的下标
			Student stus=list.get(j);
			//从第0行第一列开始赋值
			Cell cell=rowDate.createCell(0);
			cell.setCellValue(stus.getSid());
			//第二列
			Cell cell2=rowDate.createCell(1);
			cell2.setCellValue(stus.getSname());
			//第三列
			Cell cell3=rowDate.createCell(2);
			cell3.setCellValue(stus.getSage());
			//第四列
			Cell cell4=rowDate.createCell(3);
			cell4.setCellValue(stus.getSsex());
		}
		//输出数据的集合
		System.out.println("数据："+list);
		//定义导出文件的路径
		String file="C:\\Users\\zjjt\\Desktop/导出.xls";
		try {
			//输出流
			FileOutputStream fileoutputstream=new FileOutputStream(file);
			//写出
			wb.write(fileoutputstream);
			//关闭
			wb.close();
			System.out.println("导出成功!!");
		} catch (Exception e) {
			//抛出异常
			e.printStackTrace();
		}
		
	}*/
}
